package com.bbva.gptf.back.transformador;

import java.math.BigDecimal;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import org.springframework.core.convert.converter.Converter;

import com.bbva.gptf.dto.bean.InstrumentosSimulacion;

/**
 * @author Javier Estrella
 * @version 1.0
 * @created 06-mar-2013 18:34:05
 */
public class TransformadorResultSetToSimulacion implements Converter<ResultSet,List<InstrumentosSimulacion>> {

	private static final String CD_CONTRATO = "CD_CONTRATO";
	private static final String NB_CLASIFICACION = "NB_CLASIFICACION";
	private static final String TP_CONTRATO = "TP_CONTRATO";
	private static final String CD_VALOR_BMV = "CD_VALOR_BMV";
	private static final String CD_EMISORA = "CD_EMISORA";
	private static final String CD_SERIE = "CD_SERIE";
	private static final String IM_CA_MONTO = "IM_CA_MONTO";
	private static final String PC_CA_INTEGRACION = "PC_CA_INTEGRACION";
	private static final String NU_CA_DELTA = "NU_CA_DELTA";
	private static final String NU_CA_CONTRIBUCION = "NU_CA_CONTRIBUCION";
	private static final String NU_CA_TASA = "NU_CA_TASA";
	private static final String IM_CA_PRECIO = "IM_CA_PRECIO";
	private static final String CT_CA_TITULO = "CT_CA_TITULO";
	private static final String IM_CA_LIQUIDEZ = "IM_CA_LIQUIDEZ";
	private static final String IM_CA_VAL_CARTERA = "IM_CA_VAL_CARTERA";
	private static final String PC_CA_BENCHMARK = "PC_CA_BENCHMARK";
	private static final String PC_CA_CONBENCHMARK = "PC_CA_CONBENCHMARK";
	private static final String PC_CA_DIFINTEGRA = "PC_CA_DIFINTEGRA";
	private static final String NU_CA_PONDERACION = "NU_CA_PONDERACION";
	private static final String CT_CF_TITULO = "CT_CF_TITULO";
	private static final String IM_CF_PRECIO = "IM_CF_PRECIO";
	private static final String IM_CF_MONTO = "IM_CF_MONTO";
	private static final String IM_CF_LIQUIDEZ = "IM_CF_LIQUIDEZ";
	private static final String PC_CF_INTEGRACION = "PC_CF_INTEGRACION";
	private static final String NU_CF_DELTA = "NU_CF_DELTA";
	private static final String NU_CF_CONTRIBUCION = "NU_CF_CONTRIBUCION";
	private static final String NU_CF_TASA = "NU_CF_TASA";
	private static final String IM_CF_VAL_CARTERA = "IM_CF_VAL_CARTERA";
	private static final String PC_CF_BENCHMARK = "PC_CF_BENCHMARK";
	private static final String PC_CF_CONBENCHMARK = "PC_CF_CONBENCHMARK";
	private static final String PC_CF_DIFINTEGRA = "PC_CF_DIFINTEGRA";
	private static final String NU_CF_PONDERACION = "NU_CF_PONDERACION";
	private static final String IM_CF_MONTO_OPERAR = "IM_CF_MONTO_OPERAR";
	private static final String CD_GRUPO_DELTA = "CD_GRUPO_DELTA";
	private static final String TP_NIVEL = "TP_NIVEL";
	private static final String TP_TENENCIA = "TP_TENENCIA";
	private static final String NB_GRUPO_DELTA = "NB_GRUPO_DELTA";
	private static final String CT_CF_TITULO_OR = "CT_CF_TITULO_OR";
	private static final String IM_CF_MONTO_OR = "IM_CF_MONTO_OR";
	private static final String IM_SALDO_CONTABLE = "IM_SALDO_CONTABLE";
	private static final String IM_PRECIO_SUCIO = "IM_PRECIO_SUCIO";
	private static final String IM_VALOR_NOMINAL = "IM_VALOR_NOMINAL";
	private static final String ST_CALCULAR = "ST_CALCULAR";

	@Override
	public List<InstrumentosSimulacion> convert(ResultSet rs){
		List<InstrumentosSimulacion> lista = new ArrayList<InstrumentosSimulacion>();		
		try {
			while (rs.next()) {
				InstrumentosSimulacion is = new InstrumentosSimulacion();				
				is.setCdContrato(rs.getLong(CD_CONTRATO));
				is.setNbClasificacion(rs.getString(NB_CLASIFICACION));
				is.setTpContrato(rs.getString(TP_CONTRATO));
				is.setCdValorBmv(rs.getString(CD_VALOR_BMV));
				is.setCdEmisora(rs.getString(CD_EMISORA));
				is.setCdSerie(rs.getString(CD_SERIE));
				is.setImCaMonto(rs.getBigDecimal(IM_CA_MONTO));
				is.setPcCaIntegracion(rs.getBigDecimal(PC_CA_INTEGRACION));
				is.setNuCaDelta(rs.getBigDecimal(NU_CA_DELTA));
				is.setNuCaContribucion(rs.getBigDecimal(NU_CA_CONTRIBUCION));
				is.setNuCaTasa(rs.getBigDecimal(NU_CA_TASA));
				is.setImCaPrecio(rs.getBigDecimal(IM_CA_PRECIO));
				is.setCtCaTitulo(rs.getLong(CT_CA_TITULO));
				is.setImCaLiquidez(rs.getBigDecimal(IM_CA_LIQUIDEZ));
				is.setImCaValCartera(rs.getBigDecimal(IM_CA_VAL_CARTERA));
				is.setPcCaBenchmark(rs.getBigDecimal(PC_CA_BENCHMARK));
				is.setPcCaConbenchmark(rs.getBigDecimal(PC_CA_CONBENCHMARK));
				is.setPcCaDifintegra(rs.getBigDecimal(PC_CA_DIFINTEGRA));
				is.setNuCaPonderacion(rs.getBigDecimal(NU_CA_PONDERACION));
				is.setCtCfTitulo(rs.getLong(CT_CF_TITULO));
				is.setImCfPrecio(rs.getBigDecimal(IM_CF_PRECIO));
				is.setImCfMonto(rs.getBigDecimal(IM_CF_MONTO));
				is.setImCfLiquidez(rs.getBigDecimal(IM_CF_LIQUIDEZ));
				is.setPcCfIntegracion(rs.getBigDecimal(PC_CF_INTEGRACION));
				is.setNuCfDelta(rs.getBigDecimal(NU_CF_DELTA));
				is.setNuCfContribucion(rs.getBigDecimal(NU_CF_CONTRIBUCION));
				is.setNuCfTasa(rs.getBigDecimal(NU_CF_TASA));
				is.setImCfValCartera(rs.getBigDecimal(IM_CF_VAL_CARTERA));
				is.setPcCfBenchmark(rs.getBigDecimal(PC_CF_BENCHMARK));
				is.setPcCfConbenchmark(rs.getBigDecimal(PC_CF_CONBENCHMARK));
				is.setPcCfDifintegra(rs.getBigDecimal(PC_CF_DIFINTEGRA));
				is.setNuCfPonderacion(rs.getBigDecimal(NU_CF_PONDERACION));
				is.setImCfMontoOperar(rs.getBigDecimal(IM_CF_MONTO_OPERAR));
				is.setCdGrupoDelta(rs.getBigDecimal(CD_GRUPO_DELTA));
				is.setTpNivel(rs.getLong(TP_NIVEL));
				is.setTpTenencia(rs.getString(TP_TENENCIA));
				is.setNbGrupoDelta(rs.getString(NB_GRUPO_DELTA));
				is.setCtCfTituloOr(rs.getLong(CT_CF_TITULO_OR));
				is.setImCfMontoOr(rs.getBigDecimal(IM_CF_MONTO_OR));
				is.setImSaldoContable(rs.getBigDecimal(IM_SALDO_CONTABLE));
				is.setImPrecioSucio(rs.getBigDecimal(IM_PRECIO_SUCIO));
				is.setImValorNominal(rs.getBigDecimal(IM_VALOR_NOMINAL));
				is.setCalcular(rs.getBoolean(ST_CALCULAR));
				if (is.getImValorNominal() != null
						&& is.getImValorNominal().compareTo(BigDecimal.ZERO) != 0
						&& is.getCtCaTitulo() != is.getCtCfTitulo())
					is.setImMontoNominal(is.getImValorNominal().multiply(
							BigDecimal.valueOf(is.getCtCfTitulo() - is.getCtCaTitulo())));
				lista.add(is);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return lista;
	}

}